"use strict"; window.LCG_TRACKING_INITIALIZE = function () { var _DEBUG = _coalesce (window.LCG_TRACKING_DEBUG, false); if (_DEBUG) console.log ("[LCG][dd][6f1f5c0d]", "initializing..."); // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: var _PUSH_URL = new URL (_coalesce (window.LCG_TRACKING_PUSH_URL, "/track"), document.location) .href; var _PUSH_SESSION = _coalesce (window.LCG_TRACKING_SESSION, "00000000000000000000000000000000"); var _CONTEXT_APPLICATION = _coalesce (window.LCG_TRACKING_APPLICATION, null); var _CONTEXT_ENVIRONMENT = _coalesce (window.LCG_TRACKING_ENVIRONMENT, null); var _CONTEXT_EXPERIMENT = _coalesce (window.LCG_TRACKING_EXPERIMENT, null); var _CONTEXT_VARIANT = _coalesce (window.LCG_TRACKING_VARIANT, null); var _CONTEXT_EPOCH = _coalesce (window.LCG_TRACKING_EPOCH, null); var _CONTEXT_SCOPE = _coalesce (window.LCG_TRACKING_SCOPE, null); var _CONTEXT_DATA = _coalesce (window.LCG_TRACKING_DATA, null); var _CONTEXT_SESSION = _coalesce (window.LCG_TRACKING_SESSION, null); var _CONTEXT_TRANSACTION = _coalesce (window.LCG_TRACKING_TRANSACTION, null); var _CONTEXT_TRANSACTION_RESET = -1; var _CONTEXT_TRANSACTION_COUNTER = 0; var _CONTEXT_LAST_document_location = document.location.href; var _CONTEXT_LAST_document_referrer = document.referrer; var _PUSH_CONTEXT_INCLUDE = _coalesce (window.LCG_TRACKING_PUSH_CONTEXT_INCLUDE, false); var _PUSH_DOCUMENT_INCLUDE = _coalesce (window.LCG_TRACKING_PUSH_DOCUMENT_INCLUDE, false); var _PUSH_VIEWPORT_INCLUDE = _coalesce (window.LCG_TRACKING_PUSH_VIEWPORT_INCLUDE, false); var _COLLECT_INITIALIZED_ENABLED = _coalesce (window.LCG_TRACKING_COLLECT_INITIALIZED_ENABLED, true); var _COLLECT_INITIALIZED_FULL = _coalesce (window.LCG_TRACKING_COLLECT_INITIALIZED_FULL, false); var _COLLECT_BEACON_ENABLED = _coalesce (window.LCG_TRACKING_COLLECT_BEACON_ENABLED, false); var _COLLECT_BEACON_INTERVAL = _coalesce (window.LCG_TRACKING_COLLECT_BEACON_INTERVAL, 60) * 1000; var _COLLECT_CONTEXT_ENABLED = _coalesce (window.LCG_TRACKING_COLLECT_CONTEXT_ENABLED, true); var _COLLECT_DOCUMENT_ENABLED = _coalesce (window.LCG_TRACKING_COLLECT_DOCUMENT_ENABLED, true); var _COLLECT_DEVICE_ENABLED = _coalesce (window.LCG_TRACKING_COLLECT_DEVICE_ENABLED, true); var _COLLECT_VIEWPORT_ENABLED = _coalesce (window.LCG_TRACKING_COLLECT_VIEWPORT_ENABLED, false); var _COLLECT_VIEWPORT_INTERVAL = _coalesce (window.LCG_TRACKING_COLLECT_VIEWPORT_INTERVAL, 60) * 1000; var _COLLECT_PERFORMANCE_NAVIGATION_ENABLED = _coalesce (window.LCG_TRACKING_COLLECT_PERFORMANCE_NAVIGATION_ENABLED, true); var _COLLECT_PERFORMANCE_ENTRIES_ENABLED = _coalesce (window.LCG_TRACKING_COLLECT_PERFORMANCE_ENTRIES_ENABLED, false); var _COLLECT_PERFORMANCE_ENTRIES_INTERVAL = _coalesce (window.LCG_TRACKING_COLLECT_PERFORMANCE_ENTRIES_INTERVAL, 6) * 1000; var _INJECT_A_ELEMENTS = _coalesce (window.LCG_TRACKING_INJECT_A_ELEMENTS_ENABLED, false); var _INJECT_DATA_ELEMENTS = _coalesce (window.LCG_TRACKING_INJECT_DATA_ELEMENTS_ENABLED, true); // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: if (_DEBUG) { console.log ("[LCG][dd][89c0ee13]", "configuration", "_PUSH_URL", _PUSH_URL); console.log ("[LCG][dd][89c0ee13]", "configuration", "_PUSH_SESSION", _PUSH_SESSION); console.log ("[LCG][dd][89c0ee13]", "configuration", "_CONTEXT_APPLICATION", _CONTEXT_APPLICATION); console.log ("[LCG][dd][89c0ee13]", "configuration", "_CONTEXT_ENVIRONMENT", _CONTEXT_ENVIRONMENT); console.log ("[LCG][dd][89c0ee13]", "configuration", "_CONTEXT_EXPERIMENT", _CONTEXT_EXPERIMENT); console.log ("[LCG][dd][89c0ee13]", "configuration", "_CONTEXT_VARIANT", _CONTEXT_VARIANT); console.log ("[LCG][dd][89c0ee13]", "configuration", "_CONTEXT_EPOCH", _CONTEXT_EPOCH); console.log ("[LCG][dd][89c0ee13]", "configuration", "_CONTEXT_SCOPE", _CONTEXT_SCOPE); console.log ("[LCG][dd][89c0ee13]", "configuration", "_CONTEXT_SESSION", _CONTEXT_SESSION); console.log ("[LCG][dd][89c0ee13]", "configuration", "_CONTEXT_TRANSACTION", _CONTEXT_TRANSACTION); console.log ("[LCG][dd][89c0ee13]", "configuration", "_PUSH_CONTEXT_INCLUDE", _PUSH_CONTEXT_INCLUDE); console.log ("[LCG][dd][89c0ee13]", "configuration", "_PUSH_DOCUMENT_INCLUDE", _PUSH_DOCUMENT_INCLUDE); console.log ("[LCG][dd][89c0ee13]", "configuration", "_PUSH_VIEWPORT_INCLUDE", _PUSH_VIEWPORT_INCLUDE); console.log ("[LCG][dd][89c0ee13]", "configuration", "_COLLECT_INITIALIZED_ENABLED", _COLLECT_INITIALIZED_ENABLED); console.log ("[LCG][dd][89c0ee13]", "configuration", "_COLLECT_INITIALIZED_FULL", _COLLECT_INITIALIZED_FULL); console.log ("[LCG][dd][89c0ee13]", "configuration", "_COLLECT_BEACON_ENABLED", _COLLECT_BEACON_ENABLED); console.log ("[LCG][dd][89c0ee13]", "configuration", "_COLLECT_BEACON_INTERVAL", _COLLECT_BEACON_INTERVAL / 1000.0); console.log ("[LCG][dd][89c0ee13]", "configuration", "_COLLECT_CONTEXT_ENABLED", _COLLECT_CONTEXT_ENABLED); console.log ("[LCG][dd][89c0ee13]", "configuration", "_COLLECT_DOCUMENT_ENABLED", _COLLECT_DOCUMENT_ENABLED); console.log ("[LCG][dd][89c0ee13]", "configuration", "_COLLECT_DEVICE_ENABLED", _COLLECT_DEVICE_ENABLED); console.log ("[LCG][dd][89c0ee13]", "configuration", "_COLLECT_VIEWPORT_ENABLED", _COLLECT_VIEWPORT_ENABLED); console.log ("[LCG][dd][89c0ee13]", "configuration", "_COLLECT_VIEWPORT_INTERVAL", _COLLECT_VIEWPORT_INTERVAL / 1000.0); console.log ("[LCG][dd][89c0ee13]", "configuration", "_COLLECT_PERFORMANCE_NAVIGATION_ENABLED", _COLLECT_PERFORMANCE_NAVIGATION_ENABLED); console.log ("[LCG][dd][89c0ee13]", "configuration", "_COLLECT_PERFORMANCE_ENTRIES_ENABLED", _COLLECT_PERFORMANCE_ENTRIES_ENABLED); console.log ("[LCG][dd][89c0ee13]", "configuration", "_COLLECT_PERFORMANCE_ENTRIES_INTERVAL", _COLLECT_PERFORMANCE_ENTRIES_INTERVAL / 1000.0); console.log ("[LCG][dd][89c0ee13]", "configuration", "_INJECT_A_ELEMENTS", _INJECT_A_ELEMENTS); console.log ("[LCG][dd][89c0ee13]", "configuration", "_INJECT_DATA_ELEMENTS", _INJECT_DATA_ELEMENTS); } // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: function _queryContext () { return ({ "$schema" : "20200304a", "application" : _CONTEXT_APPLICATION, "environment" : _CONTEXT_ENVIRONMENT, "experiment" : _CONTEXT_EXPERIMENT, "variant" : _CONTEXT_VARIANT, "epoch" : _CONTEXT_EPOCH, "scope" : _CONTEXT_SCOPE, "data" : _CONTEXT_DATA, }); } function _queryDocument () { return _query_0 ("20190617a", window, { "location" : [function () { return (_CONTEXT_LAST_document_location); }], "referrer" : [function () { return (_CONTEXT_LAST_document_referrer); }], "title" : ["document", "title"], }); } function _queryDevice () { return _query_0 ("20190617a", window, { "user_agent" : ["navigator", "userAgent"], "platform" : ["navigator", "platform"], "language" : ["navigator", "language"], "languages" : ["navigator", "languages"], "connection_type" : ["navigator", "connection", "effectiveType"], "connection_downlink" : ["navigator", "connection", "downlink"], "connection_rtt" : ["navigator", "connection", "rtt"], "connection_save" : ["navigator", "connection", "saveData"], "screen_width" : ["screen", "width"], "screen_height" : ["screen", "height"], "screen_width_actual" : ["screen", "availWidth"], "screen_height_actual" : ["screen", "availHeight"], "screen_orientation" : ["screen", "orientation", "type"], "screen_px_ratio" : ["devicePixelRatio"], }); } function _queryViewport () { return _query_0 ("20190617a", window, { "window_width" : ["outerWidth"], "window_height" : ["outerHeight"], "viewport_width" : ["innerWidth"], "viewport_height" : ["innerHeight"], "viewport_scroll_x" : ["scrollX"], "viewport_scroll_y" : ["scrollY"], "viewport_px_ratio" : ["devicePixelRatio"], }); } function _queryPerformanceNavigation () { return _query_0 ("20190617a", window, { "navigation" : ["performance", "navigation"], "timing" : ["performance", "timing"], }); } function _query_0 (_schema, _root, _attributes) { var _outcome = { "$schema" : _schema, }; for (var _attribute in _attributes) { var _value = _root; for (var _path in _attributes[_attribute]) { _path = _attributes[_attribute][_path]; switch (typeof (_path)) { case "string" : if (typeof (_value) != "object") { console.log ("[LCG][ee][a3387bbe]", _root, _attributes[_attribute]); _value = undefined; } _value = _value[_path]; break; case "function" : try { _value = _path (_value); } catch (_error) { console.log ("[LCG][ee][baaf52a2]", _root, _attributes[_attribute], _error); _value = undefined; } break; default : console.log ("[LCG][ee][fe47f09e]", _path); break; } if (_value === undefined) break; } switch (typeof (_value)) { case "undefined" : case "null" : _value = null; break; case "boolean" : case "number" : break; case "string" : if (_value == "") _value = null; break; case "object" : try { _value = JSON.stringify (_value); _value = JSON.parse (_value); } catch (_error) { console.log ("[LCG][ee][c453d5cb]", _error); _value = ""; } break; default : _value = ""; break; } _outcome[_attribute] = _value; } return (_outcome); } var _queryPerformanceEntriesBuffer = []; function _queryPerformanceEntries () { var _entries = []; while ((_queryPerformanceEntriesBuffer.length > 0) && (_entries.length < 8)) { var _event = _queryPerformanceEntriesBuffer.shift (); try { _event = JSON.stringify (_event); _event = JSON.parse (_event); } catch (_error) { console.log ("[LCG][ee][be009ca3]", _event, _error); continue; } _entries.push (_event); } if (_entries.length == 0) return null; var _outcome = { "$schema" : "20190617a", "entries" : _entries, }; return _outcome; } if (_COLLECT_PERFORMANCE_ENTRIES_ENABLED) { function _queryPerformanceEntriesHandle (_events) { for (var _index in _events) { var _event = _events[_index]; try { _event = _event.toJSON (); switch (_event.entryType) { case "resource" : if (_event.name.startsWith (_PUSH_URL + "/")) _event = null; break; case "layout-shift" : var _eventSources = []; for (var _index in _event.sources) _eventSources.push ({ currentRect : _event.sources[_index].currentRect, previousRect : _event.sources[_index].previousRect, }); _event.sources = _eventSources; break; } } catch (_error) { console.log ("[LCG][ee][b389872a]", _event, _error); _event = null; } if (_event !== null) _queryPerformanceEntriesBuffer.push (_event); } } try { var _queryPerformanceEntriesObserver = new PerformanceObserver (function (_event) { _queryPerformanceEntriesHandle (_event.getEntries ()); }); var _queryPerformanceEntriesTypes = PerformanceObserver.supportedEntryTypes || ["navigation", "resource"]; try { _queryPerformanceEntriesHandle (_queryPerformanceEntriesObserver.takeRecords ()); } catch (_error) { console.log ("[LCG][ee][be33d4f8]", _error); } try { for (var _index in _queryPerformanceEntriesTypes) _queryPerformanceEntriesObserver.observe ({ type : _queryPerformanceEntriesTypes[_index], buffered : true }); } catch (_error) { console.log ("[LCG][ee][f5e0353f]", _error); try { _queryPerformanceEntriesObserver.observe ({ entryTypes : _queryPerformanceEntriesTypes }); } catch (_error) { console.log ("[LCG][ee][d2a55550]", _error); } } } catch (_error) { console.log ("[LCG][ee][7972e482]", _error); } } // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: function _pushInitialized () { if (! _COLLECT_INITIALIZED_FULL) { return (_push_0 ("initialized", null, true)); } else { var _message = { "context" : _perhapsUndefined (_COLLECT_CONTEXT_ENABLED ? _queryContext () : null), "document" : _perhapsUndefined (_COLLECT_DOCUMENT_ENABLED ? _queryDocument () : null), "device" : _perhapsUndefined (_COLLECT_DEVICE_ENABLED ? _queryDevice () : null), "viewport" : _perhapsUndefined (_COLLECT_VIEWPORT_ENABLED ? _queryViewport () : null), "performance" : _perhapsUndefined (_COLLECT_PERFORMANCE_NAVIGATION_ENABLED ? _queryPerformanceNavigation () : null), }; return (_push_0 ("initialized-full", _message, false)); } } function _pushBeacon () { return (_push_0 ("beacon", null)); } function _pushContext () { return (_push_0 ("query-context", _queryContext ())); } function _pushDocument () { return (_push_0 ("query-document", _queryDocument ())); } function _pushDevice () { return (_push_0 ("query-device", _queryDevice ())); } function _pushViewport () { return (_push_0 ("query-viewport", _queryViewport ())); } function _pushPerformanceNavigation () { return (_push_0 ("query-performance", _queryPerformanceNavigation ())); } function _pushPerformanceEntries () { while (true) { var _message = _queryPerformanceEntries (); if (_message == null) return; _push_0 ("query-performance", _message); } } function _pushEvent (_component, _action, _arguments) { return (_pushEvent_0 (_component, _action, _arguments)); } function _pushEvent_0 (_component, _action, _arguments) { return (_push_0 ("event", { "component" : _perhapsUndefined (_component), "action" : _perhapsUndefined (_action), "arguments" : _perhapsUndefined (_arguments), })); } // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: function _injectDomA () { var _elements = document.getElementsByTagName ("a"); for (var _index = 0; _index < _elements.length; _index += 1) { var _element = _elements[_index]; if (_element.dataset.lcgTrackInjected != null) continue; if ((_element.id != null) || (_element.href != null) || (_element.name != null) || (_element.title != null)) if (_element.dataset.lcgTrack == null) _injectA (_element); } } function _injectA (_element) { if (_DEBUG) console.log ("[LCG][dd][4d119f93]", "injecting A", { tag : "a", id : _perhapsUndefined (_element.id), href : _perhapsUndefined (_element.href), name : _perhapsUndefined (_element.name), title : _perhapsUndefined (_element.title), }); _element.addEventListener ("click", function (_event) { _pushEvent_0 ("__dom_a", "click", { tag : "a", id : _perhapsUndefined (_element.id), href : _perhapsUndefined (_element.href), name : _perhapsUndefined (_element.name), title : _perhapsUndefined (_element.title), }); }); _element.dataset.lcgTrackInjected = "true"; } function _injectDomData () { var _elements = document.getElementsByTagName ("*"); for (var _index = 0; _index < _elements.length; _index += 1) { var _element = _elements[_index]; if (_element.dataset.lcgTrackInjected != null) continue; if (_element.dataset.lcgTrack != null) _injectData (_element); } } function _injectData (_element) { var _descriptor = _element.dataset.lcgTrack.split (" "); if (_descriptor.length == 1) { _descriptor = [_descriptor[0], "/click"]; } else if (_descriptor.length != 2) { console.log ("[LCG][ee][84b2e619]", "invalid element tracking descriptor", _descriptor, _element); return; } var _component = _descriptor[0]; var _action = _descriptor[1]; var _arguments = _element.dataset.lcgTrackData; if (_arguments != null) try { _arguments = JSON.parse (_arguments); } catch (_error) { console.log ("[LCG][ee][5d800ea4]", "invalid element tracking arguments", _arguments, _element, _error); _arguments = null; } if ((typeof (_component) != "string") || ! _component.match (/^(\/[a-z0-9]+([_-]{1,2}[a-z0-9]+)*)+$/)) { console.log ("[LCG][ee][34d9190e]", "invalid event component identifier", _component); return; } if ((typeof (_action) != "string") || ! _action.match (/^(\/[a-z0-9]+([_-]{1,2}[a-z0-9]+)*)+$/)) { console.log ("[LCG][ee][d428460b]", "invalid event action identifier", _action); return; } if (_arguments == undefined) _arguments = null; if ((_arguments !== null) && (typeof (_arguments) != "object")) { console.log ("[LCG][ee][3cdce654]", "invalid event arguments", _arguments); return; } if (_DEBUG) console.log ("[LCG][dd][302ecbfb]", "injecting track", { component : _component, action : _action, arguments : _arguments, }); _element.addEventListener ("click", function (_event) { _pushEvent (_component, _action, _arguments); }); _element.dataset.lcgTrackInjected = "true"; } // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: function _collect () { if (_pushBeaconInterval !== null) { clearInterval (_pushBeaconInterval); _pushBeaconInterval = null; } if (_pushViewportInterval !== null) { clearInterval (_pushViewportInterval); _pushViewportInterval = null; } if (_pushPerformanceEntriesInterval !== null) { clearInterval (_pushPerformanceEntriesInterval); _pushPerformanceEntriesInterval = null; _pushPerformanceEntries (); } _CONTEXT_TRANSACTION_RESET += 1; _CONTEXT_TRANSACTION_COUNTER = 0; if (_CONTEXT_TRANSACTION_RESET > 0) { _COLLECT_PERFORMANCE_NAVIGATION_ENABLED = false; } if (_COLLECT_INITIALIZED_ENABLED) _pushInitialized (); else if (_COLLECT_BEACON_ENABLED) _pushBeacon (); if (!_COLLECT_INITIALIZED_FULL) { if (_COLLECT_CONTEXT_ENABLED) _pushContext (); if (_COLLECT_DOCUMENT_ENABLED) _pushDocument (); if (_COLLECT_DEVICE_ENABLED) _pushDevice (); if (_COLLECT_VIEWPORT_ENABLED) _pushViewport (); if (_COLLECT_PERFORMANCE_NAVIGATION_ENABLED) _pushPerformanceNavigation (); if (_COLLECT_PERFORMANCE_ENTRIES_ENABLED) _pushPerformanceEntries (); } if ((_COLLECT_BEACON_ENABLED) && (_COLLECT_BEACON_INTERVAL > 0)) { _pushBeaconInterval = setInterval (_pushBeacon, _COLLECT_BEACON_INTERVAL); } if ((_COLLECT_VIEWPORT_ENABLED) && (_COLLECT_VIEWPORT_INTERVAL > 0)) { _pushViewportInterval = setInterval (_pushViewport, _COLLECT_VIEWPORT_INTERVAL); } if ((_COLLECT_PERFORMANCE_ENTRIES_ENABLED) && (_COLLECT_PERFORMANCE_ENTRIES_INTERVAL > 0)) { _pushPerformanceEntriesInterval = setInterval (_pushPerformanceEntries, _COLLECT_PERFORMANCE_ENTRIES_INTERVAL); } if (_INJECT_A_ELEMENTS) _injectDomA (); if (_INJECT_DATA_ELEMENTS) _injectDomData (); } var _pushBeaconInterval = null; var _pushViewportInterval = null; var _pushPerformanceEntriesInterval = null; // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: function _push_0 (_type, _message, _includeAll) { var _transaction = _CONTEXT_TRANSACTION; if (_CONTEXT_TRANSACTION_RESET >= 0) { _transaction += "-" + _CONTEXT_TRANSACTION_RESET; } _CONTEXT_TRANSACTION_COUNTER += 1; var _payload = { "$schema" : "20190617a", "type" : _type, "session" : _CONTEXT_SESSION, "transaction" : _transaction, "reset" : _CONTEXT_TRANSACTION_RESET, "counter" : _CONTEXT_TRANSACTION_COUNTER, "timestamp" : Date.now (), "message" : _message, }; if (_PUSH_CONTEXT_INCLUDE || (_includeAll && !_COLLECT_CONTEXT_ENABLED)) _payload["context"] = _queryContext (); if (_PUSH_DOCUMENT_INCLUDE || (_includeAll && !_COLLECT_DOCUMENT_ENABLED)) _payload["document"] = _queryDocument (); if (_PUSH_VIEWPORT_INCLUDE || (_includeAll && !_COLLECT_DEVICE_ENABLED)) _payload["viewport"] = _queryViewport (); return (_pushPayload (_type, _CONTEXT_TRANSACTION_COUNTER, _payload)); } function _pushPayload (_type, _counter, _payload) { var _session = _PUSH_SESSION; if (_DEBUG) console.log ("[LCG][dd][f0e23c63]", "pushing", _type, _counter, _payload); _payload = _encodePayload (_payload); var _signature = _signPayload (_session, _payload); return (_sendPush (_session, _signature, _type, _counter, _payload)); } function _encodePayload (_payload) { try { _payload = JSON.stringify (_payload); } catch (_error) { console.log ("[LCG][ee][6bd3813a]", _payload, _error); return; } _payload.replace (/[\u007F-\uFFFF]/g, function(_character) { var _code = _character.charCodeAt (0); return ("\\u" + ("0000" + _code.toString (16)) .substr (-4)); }); _payload = btoa (_payload); while (true) { var _oldPayload = _payload; _payload = _payload.replace ('+', '-'); _payload = _payload.replace ('/', '_'); _payload = _payload.replace ('=', ''); if (_oldPayload == _payload) break; } return (_payload); } function _signPayload (_session, _payload) { return ("-"); } function _sendPush (_session, _signature, _type, _counter, _payload) { var _url = _PUSH_URL + "/" + _PUSH_SESSION + "/" + _signature + "/" + _payload; _delay (function () { var _request = new XMLHttpRequest (); _request.onload = (function (_event) { if ((_request.status == 200) || (_request.status == 204)) { if (_DEBUG) console.log ("[LCG][dd][0c1ba5c9]", "pushed", _type, _counter); } else { console.log ("[LCG][ee][7ac02341]", { "url" : _url, "url_length" : _url.length, "status" : _request.status, "response" : _request.response, }); } }); _request.open ("GET", _url); _request.send (); }); } // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: function _delay (_action) { setTimeout (_action, 0); } function _coalesce () { for (var _index in arguments) { var _argument = arguments[_index]; if (_argument !== undefined) return (_argument); } return (undefined); } function _perhapsUndefined (_value) { switch (_value) { case undefined : case null : case "" : return (undefined); default : return (_value); } } // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: window.LCG_TRACKING_PUSH = _pushEvent; window.LCG_TRACKING_LOCATION_CHANGED = function (_next, _previous) { _delay (function () { if (_CONTEXT_LAST_document_location != document.location.href) { _CONTEXT_LAST_document_referrer = _CONTEXT_LAST_document_location; _CONTEXT_LAST_document_location = document.location.href; console.log ("[LCG][dd][66bb19ab] initiating reset...", { previous : _previous, next : _next }); _collect (); } else { if (_DEBUG) console.log ("[LCG][dd][3ffc67d4] skipping reset...", { previous : _previous, next : _next }); } }); }; // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: _delay (_collect); if (_DEBUG) console.log ("[LCG][dd][3b3e6cd0]", "initialized!"); }; window.LCG_TRACKING_BOOTSTRAP = function () { var _DEBUG = window.LCG_TRACKING_DEBUG; if (_DEBUG === undefined) _DEBUG = false; var _INITIALIZE_DELAY = window.LCG_TRACKING_INITIALIZE_DELAY; if (_INITIALIZE_DELAY === undefined) _INITIALIZE_DELAY = 0; if ((document.readyState == "complete") || (document.readyState == "interactive")) { if (_DEBUG) { console.log ("[LCG][dd][e72124d2]", "bootstrapping (initializing)..."); } if (_INITIALIZE_DELAY <= 0) { setTimeout (window.LCG_TRACKING_INITIALIZE, 0); } else { setTimeout (window.LCG_TRACKING_INITIALIZE, _INITIALIZE_DELAY); } } else { if (_DEBUG) { console.log ("[LCG][dd][7920d8bd]", "bootstrapping (waiting)..."); } document.addEventListener ("DOMContentLoaded", window.LCG_TRACKING_BOOTSTRAP); } }; if (window.LCG_TRACKING_SESSION !== undefined) { setTimeout (window.LCG_TRACKING_BOOTSTRAP, 0); }